package com.itheima.service.serviceimpl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;


import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.mapper.ClazzMapper;
import com.itheima.pojo.Clazz;
import com.itheima.pojo.Emp;
import com.itheima.pojo.PageResult;
import com.itheima.pojo.Student;
import com.itheima.service.ClazzService;
import com.itheima.service.EmpService;
import com.itheima.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.github.pagehelper.PageHelper;


import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

@Service
public class ClazzServiceimpl extends ServiceImpl<ClazzMapper, Clazz> implements ClazzService {
    @Autowired
    private ClazzMapper clazzMapper;

    @Autowired
    private EmpService empService;

    @Override
    public PageResult<Clazz> queryString(String name, LocalDate begin, LocalDate end, Integer page, Integer pageSize) {
//        //设置分页参数
//        PageHelper.startPage(page1, pageSize);
//        //查询所有数据
//        Page<Clazz> clazzs = clazzMapper.findAll(name, begin, end);
//        //封装实体类
//        PageResult<Clazz> pageResult = new PageResult<>();
//        pageResult.setTotal(clazzs.getTotal());
//        List<Clazz> result = clazzs.getResult();
//
//        for (Clazz clazz : result) {
//            //设置status的状态
//            /*
//            * 第一个条件 已开班：
//                beginDate.isBefore(now)：开始日期早于今天
//                endDate.isAfter(now)：结束日期晚于今天
//                同时满足 → 班级处于开课期间
//                第二个条件 未开班：    beginDate.isAfter(now)：开始日期晚于今天
//                → 班级尚未开课
//                第三个条件 已结课：endDate.isBefore(now)：结束日期早于今天
//                → 班级已经结课*/
//            if
//            (clazz.getBeginDate().isBefore(LocalDate.now())
//                    & clazz.getEndDate().isAfter(LocalDate.now())) {
//                clazz.setStatus("已开班");
//            } else if
//            (clazz.getBeginDate().isAfter(LocalDate.now())) {
//                clazz.setStatus("未开班");
//            } else if
//            (clazz.getEndDate().isBefore(LocalDate.now())) {
//                clazz.setStatus("已结课");
//            }
//        }
//
//
//        pageResult.setRows(result);
//        return pageResult;
        //设置分页参数
        IPage<Clazz> _page = new Page<>(page, pageSize);
        //查询条件
        LambdaQueryWrapper<Clazz> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(!ObjectUtils.isEmpty(name), Clazz::getName, name);
        queryWrapper.eq(!ObjectUtils.isEmpty(begin), Clazz::getBeginDate, begin);
        queryWrapper.eq(!ObjectUtils.isEmpty(end), Clazz::getEndDate, end);
        //查询所有数据
        _page = super.page(_page , queryWrapper);

        List<Clazz> clazzs = _page.getRecords();
        for (Clazz clazz : clazzs) {
            Emp emp = empService.queryById(clazz.getId());
            if(emp != null){
                clazz.setMasterName(emp.getName());
            }
        }
        for (Clazz clazz : clazzs) {
            //设置status的状态
            /*
            * 第一个条件 已开班：
                beginDate.isBefore(now)：开始日期早于今天
                endDate.isAfter(now)：结束日期晚于今天
                同时满足 → 班级处于开课期间
                第二个条件 未开班：    beginDate.isAfter(now)：开始日期晚于今天
                → 班级尚未开课
                第三个条件 已结课：endDate.isBefore(now)：结束日期早于今天
                → 班级已经结课*/
            if
            (clazz.getBeginDate().isBefore(LocalDate.now())
                    & clazz.getEndDate().isAfter(LocalDate.now())) {
                clazz.setStatus("已开班");
            } else if
            (clazz.getBeginDate().isAfter(LocalDate.now())) {
                clazz.setStatus("未开班");
            } else if
            (clazz.getEndDate().isBefore(LocalDate.now())) {
                clazz.setStatus("已结课");
            }
        }
        return new PageResult<>(_page.getTotal(), clazzs);
    }

    @Override
    public void deleteClazz(Integer id) {
        super.removeById(id);
    }

    @Override
    public void queryPostClazz(Clazz clazz) {
        //因为前端需要接受的里面没有修改时间因此需要自行补全
        clazz.setUpdateTime(LocalDateTime.now());
        clazz.setCreateTime(LocalDateTime.now());
        //clazzMapper.queryPostClazz(clazz);
        super.save(clazz);
    }
    //改的前提是先查询
    @Override
    public Clazz queryClazz(Integer id) {
     //Clazz clazz = clazzMapper.queryClazz(id);
     return super.getById(id);
    }

    @Override
    public void updateClazz(Clazz clazz) {
        //修改完后更新最后修改时间
        clazz.setUpdateTime(LocalDateTime.now());
        //clazzMapper.updateClazz(clazz);
        super.updateById(clazz);
    }
}
